package com.qolome.knowledge.features.player.music;

import org.jaudiotagger.audio.exceptions.InvalidAudioFrameException;
import org.jaudiotagger.audio.exceptions.ReadOnlyFileException;
import org.jaudiotagger.tag.TagException;

import javax.sound.sampled.AudioInputStream;
import javax.sound.sampled.UnsupportedAudioFileException;
import java.io.IOException;

/**
 * @author Qolome
 * @version V1.0
 * @Description 音乐播放器接口
 * @date 2020年 02月26日 13:56:30
 */
public interface IMusicPlayer {


    /**
     * 播放flac
     *
     * @param path flac文件路径
     * @throws IOException
     * @throws UnsupportedAudioFileException
     * @date 2019年10月25日 下午12:28:41
     */
    void flac(String path) throws UnsupportedAudioFileException, IOException;


    /**
     * 播放 wav
     *
     * @param path wav 文件路径
     * @throws IOException
     * @throws UnsupportedAudioFileException
     * @date 2019年10月25日 下午12:28:41
     */
    void wav(String path) throws UnsupportedAudioFileException, IOException;

    /**
     * wav转pcm
     *
     * @param wpath wav文件路径
     * @param ppath pcm文件保存路径
     * @date 2019年10月25日 下午12:28:41
     */
    void wavToPcm(String wpath, String ppath);

    /**
     * 播放 pcm
     *
     * @param path pcm文件路径
     * @throws IOException
     * @throws UnsupportedAudioFileException
     * @date 2019年10月25日 下午12:28:41
     */
    void pcm(String path) throws UnsupportedAudioFileException, IOException;


    /**
     * 读取pcm文件
     *
     * @param path pcm文件路径
     * @return AudioInputStream
     * @date 2019年10月25日 下午12:28:41
     */
    AudioInputStream readPcm(String path) throws UnsupportedAudioFileException, IOException;


    /**
     * 播放 mp3
     *
     * @param path mp3文件路径
     * @throws IOException
     * @throws UnsupportedAudioFileException
     * @date 2019年10月25日 下午12:28:41
     */
    void mp3(String path) throws UnsupportedAudioFileException, IOException;


    /**
     * 获取wav或者pcm文件的编码信息
     *
     * @param path wav或者pcm文件路径
     * @return wav或者pcm文件的编码信息
     * @date 2019年10月25日 下午12:28:41
     */
    public String getInfo(String path);

    /**
     * 获取mp3文件的图片
     *
     * @param mp3Path mp3flac文件路径
     * @date 2019年10月25日 下午12:28:41
     */
    void getImageFromMp3(String mp3Path, String savePath) throws IOException, TagException, ReadOnlyFileException, InvalidAudioFrameException;
}